﻿//using UnityEngine;
//using UnityEditor;
//using System.Collections;
//using System.Collections.Generic;
//using System.IO;
//using UnityEngine.UI;
//using System.Text;
//using System.Text.RegularExpressions;

///// <summary>
///// 
///// 1.所有静态文本(不需要调用(gGetUITranslation的)必须用ttext
/////2.动态文本必须按照string.format(gGetUITranslation("%d级开放"),data.active_level)这种格式
/////3.对于封装过的gGetUITranslation，封装函数如像M:show(text,translate)，一定是把要翻译的内容
/////作为第一个参数来传递
/////4.tb_table_xxx里的内容不用这里添加翻译
///// 5.不要用拼字符串的形式来构建传递给gGetUITranslation或相应封装了它的函数的参数，统一用%d级开放
/////这种类似的格式
///// 6.对于类似于Enumconfig的含有需要翻译的中文的lua文件，要在ExportTranslationKey这个脚本的wrapperFuncName数组里面添加进来
///// 7.封装的函数名一定要记得在ExportTranslationKey这个脚本的wrapperFuncName数组里面添加进来
///// </summary>
//public class ExportTranslationKey : Editor
//{
//    static string url_root = Application.dataPath + "/GameResources/";
//    static string url_cn= url_root +"ui/lang/lang_cn.txt";
//    static string url_ui= url_root+"ui";
//    //static string url_city = url_root + "city";

//    static string url_search_lua = url_root + "Lua/app";//ModifyNoticeUI.lua
//    static string[] specialLua = new string[]
//    {
//        url_root+"Lua/app/EnumConfig.lua",
//        url_root+"Lua/network/netdefine.lua",
//    };


//    /// <summary>
//    /// 封装了gGetUITranslation功能的函数，一定是给绝对的限定使用名，因为有些同名函数可能是其他的作用,这个函数名一定
//    /// 是直接传字符串的那个函数名，如app.messageTipMgr:showf("%s%d级后开启",buildingProto.name,openLevel)
//    /// </summary>
//    static string[] wrapperFuncName=new string[] {
//        "app.messageTipMgr:showf",
//        "app.messageTipMgr:show",
//        //"app.messageTipMgr:shown",
//        "app.messageTipMgr:showLevelTip",


//    };

	


//    static List<string> pathLists=new List<string>();
//    static Dictionary<string,string> dic=new Dictionary<string, string>();
//    static List<string> old_key=new List<string>();
//    static Regex regex;
//    static MatchCollection mc;


//    [MenuItem("Tools/辅助/导出翻译key")]
//    public static void Export()
//    {
//        EditorUtility.DisplayProgressBar("写入数据中", "写入数据ing", 0f);
//        dic.Clear ();
//        old_key.Clear ();
		
//        //旧_cn文件
//        FileInfo f = new FileInfo(url_cn);
//        if (f.Exists){
//            byte[] bytes= File.ReadAllBytes(url_cn);
//            string old_str = System.Text.Encoding.UTF8.GetString (bytes);
//            StringReader sreader = new StringReader (old_str);
//            string toReadStr = sreader.ReadLine ();
//            while (toReadStr != null) {
//                if (!Regex.IsMatch (toReadStr, "^#")) {
//                    old_key.Add (toReadStr);
//                }
//                toReadStr = sreader.ReadLine ();
//            }
//        }

//        //查找Text组件的中文
//        ExportUITextKey(url_ui);

//        //string pattern="\".*[\\u4e00-\\u9fa5]+.*\"";//匹配所有“”内的中文，不包括换行符
//        //string pattern=@"gGetUITranslation\((\""|\')+.*[\u4e00-\u9fa5]+.*(\""|\')+\)";//匹配所有“”内的中文，不包括换行符 gGetUITranslation\((\"|\')+.*[\\u4e00-\\u9fa5]+.*(\"|\')+\)

//        //查找gGetUITranslation(“”)内的内容 现在对lua脚本，后期可以加入c#
//        string pattern =@"gGetUITranslation\((\""|\')+[\s\S]*?(\""|\')+\)";
//        TraverseFile(url_search_lua, pattern);

//        //查找enumconfig等下的中文
//        pattern = @"[""|'].*[\u4e00-\u9fa5]+.*[""|']";   //"\"[\\u4e00-\\u9fa5]+\"";
//        SearchSpecialLua(specialLua, pattern);
		
//        //写入所有需要翻译的key
//        if (dic.Count > 0)
//        {
//            FileStream fs_cn = new FileStream (url_cn, FileMode.Append);
//            StreamWriter sw = new StreamWriter (fs_cn);
//            foreach(KeyValuePair<string,string> kv in dic)
//            {
//                sw.WriteLine (kv.Key);
//                sw.WriteLine(kv.Value);
//            }
//            sw.Flush ();
//            sw.Close ();
//            fs_cn.Close();
//        }
//        else
//        {
//            #if UNITY_EDITOR
//            Debug.Log ("rangesearch no find the target ");
//            #endif
//        }
//        EditorUtility.ClearProgressBar ();
//        Debug.Log ("export key over");
//    }

//    static void ExportUITextKey(string path)
//    {
//        DirectoryInfo folder = new DirectoryInfo (path);
//        DirectoryInfo[] directoryinfos = folder.GetDirectories ();
//        FileInfo[] fileinfos = folder.GetFiles();
//        if (directoryinfos.Length > 0)
//        {
//            foreach (DirectoryInfo dir in directoryinfos)
//            {
//                ExportUITextKey(path + "/" + dir.Name);
//            }
//        }
//        if (fileinfos.Length > 0)
//        {
//            string file_path =string.Empty;
//            foreach (FileInfo file in fileinfos)
//            {
//                if (file.Extension == ".meta")
//                    continue;

//                file_path = file.FullName;
//                file_path=file_path.Replace(@"\","/");
//                file_path = file_path.Substring (file_path.IndexOf("Assets/"));			
//                GameObject obj= AssetDatabase.LoadAssetAtPath<GameObject> (file_path);
//                if (obj != null){
//                    TraversePrefab(obj,1);
//                }
//            }
//        }
//    }
//    static void TraversePrefab(GameObject prefabobj,int id=0)
//    {
//        for (int i = 0; i < prefabobj.transform.childCount; i++)
//        {
//            Transform obj = prefabobj.transform.GetChild(i).transform;
//            TraversePrefab (obj.gameObject);
//            TText txt= obj.GetComponent<TText>();
//            if (txt == null)
//            {
//                //如果Text组件里有中文也加入翻译
//                string con = string.Empty;
//                Text txtt=obj.GetComponent<Text>();
//                if (txtt != null)
//                {
//                    con = txtt.text;
//                }
//                else
//                {
//                    TextMesh textMesh = obj.GetComponent<TextMesh>();
//                    if(textMesh!=null)
//                    {
//                        con = textMesh.text;
//                    }
//                    else
//                        continue;
//                }
				 
//                if (Regex.IsMatch (con,@"[\u4e00-\u9fa5]+")) {
//                    CheckLF (ref con);
//                    if (!dic.ContainsKey (con)&&!old_key.Contains(con)) {//
//                        dic.Add (con, "#" + con);
//                    }
//                }

//            }
//            else
//            {
//                string con = txt.text;
//                CheckLF (ref con);
//                if (!dic.ContainsKey (con)&&!old_key.Contains(con))
//                {
//                    dic.Add (con, "#" + con);
//                }
//            }
//        }
//    }


//    /// <summary>
//    /// 中文
//    /// </summary>
//    /// <param name="rootPath">Root path.</param>
//    /// <param name="pattern">Pattern.</param>
//    static void TraverseFile(string rootPath,string pattern)
//    {
//        DirectoryInfo folder = new DirectoryInfo (rootPath);
//        DirectoryInfo[] directoryinfos = folder.GetDirectories ();
//        FileInfo[] fileinfos = folder.GetFiles ();
//        if (directoryinfos.Length > 0)
//        {
//            //目录遍历
//            foreach (DirectoryInfo dir in directoryinfos)
//            {
//                TraverseFile (rootPath + "/"+dir.Name,pattern);
//            }
//        }
//        if (fileinfos.Length > 0)
//        {
//            //文件遍历
//            foreach(FileInfo dir in fileinfos)
//            {
//                //文件查找匹配
//                if (dir.Extension != ".cs"&&dir.Extension!=".lua")
//                    continue;

//                byte[] bytes= File.ReadAllBytes(dir.FullName);
//                string str = System.Text.Encoding.UTF8.GetString(bytes);
//                StringReader sreader= new StringReader(str);
//                string content = sreader.ReadLine();
//                string wrapperPattern="";
//                while (content != null)
//                {
//                    //match direct gGetUITranslation
//                    mc = Regex.Matches (content, pattern, RegexOptions.IgnoreCase);
//                    RecordDic (mc);

//                    //match wrapper gGetUITranslation
//                    for(int i=0;i<wrapperFuncName.Length;i++){
//                        wrapperPattern=wrapperFuncName[i]+@"\((\""|\')+[\s\S]*?(\""|\')+";
//                        mc = Regex.Matches (content, wrapperPattern, RegexOptions.IgnoreCase);
//                        RecordDic (mc);
//                    }
//                    content = sreader.ReadLine ();
//                }
//                sreader.Close ();
//            }     
//        }
//    }
//    static void RecordDic(MatchCollection mc)
//    {
//        if (mc.Count > 0)
//        {
//            for (int j = 0; j < mc.Count; j++)
//            {
//                string con=mc[j].Value.Trim();
//                if (con.Contains ("\"")) {
//                    con = con.Substring (con.IndexOf ("\"") + 1, con.LastIndexOf ("\"") - con.IndexOf ("\"") - 1);
//                } else if (con.Contains ("'")) {
//                    con=con.Substring(con.IndexOf("'")+1,con.LastIndexOf("'")-con.IndexOf("'")-1);
//                }
//                CheckLF (ref con);
//                if (!dic.ContainsKey (con)&&!old_key.Contains(con)) {
//                    dic.Add (con, "#" + con);
//                }

//            }
//        }
//    }
//    //替换换行为\n
//    static void CheckLF(ref string con)
//    {
//        if(con.Contains("\r")){
//            con=con.Replace("\r","");
//        }
//        if(con.Contains("\n")){
//            con=con.Replace("\n","\\n");
//        }
//    }
//    //特殊换行\\n
//    static bool CheckLF2(string con)
//    {
//        if(con.Contains("\\n")){
//            con= con.Replace("\\n","\n");
//            return true;
//        }
//        return false;
//    }
		


//    /// <summary>
//    /// 添加特殊lua文件里需要翻译的中文
//    /// </summary>
//    /// <param name="url">URL.</param>
//    /// <param name="pattern">Pattern.</param>
//    static void SearchSpecialLua(string[] urls,string pattern)
//    {
//        if (urls.Length <= 0)
//            return;
//        for (int j = 0; j < urls.Length; j++)
//        {
//            FileInfo file = new FileInfo (urls[j]);
//            byte[] bytes = File.ReadAllBytes (file.FullName);
//            string str = System.Text.Encoding.UTF8.GetString (bytes);
//            StringReader sreader = new StringReader (str);
//            string content = sreader.ReadLine();
//            while (content != null)
//            {
//                mc = Regex.Matches (content, pattern, RegexOptions.IgnoreCase);
//                if (mc.Count > 0) {
//                    for (int i = 0; i < mc.Count; i++) {
//                        string con = mc [i].Value.Trim ();
//                        if (con.Contains ("\"")) {
//                            con = con.Substring (con.IndexOf ("\"") + 1, con.LastIndexOf ("\"") - con.IndexOf ("\"") - 1);
//                        } else if (con.Contains ("'")) {
//                            con=con.Substring(con.IndexOf("'")+1,con.LastIndexOf("'")-con.IndexOf("'")-1);
//                        }
//                        if (!dic.ContainsKey (con)&&!old_key.Contains(con)) {//
//                            dic.Add (con, "#" + con);
//                        }
//                    }
//                }
//                content = sreader.ReadLine ();
//            }
//            sreader.Close ();
//        }
//    }

//    /// <summary>
//    /// 测试查找中文内容在哪里文件里
//    /// </summary>
//    /// <param name="rootPath">Root path.</param>
//    /// <param name="pattern">Pattern.</param>
//    static void TestTraverseFile(string rootPath,string pattern)
//    {
//        DirectoryInfo folder = new DirectoryInfo (rootPath);

//        DirectoryInfo[] directoryinfos = folder.GetDirectories ();
//        FileInfo[] fileinfos = folder.GetFiles ();
//        if (directoryinfos.Length > 0) {
//            //目录遍历
//            foreach (DirectoryInfo dir in directoryinfos) {
//                if (dir.Extension == ".meta")
//                    continue;
//                TestTraverseFile (rootPath + "/"+dir.Name,pattern);
//            }
//        }
//        if (fileinfos.Length > 0) {
//            //文件遍历
//            string keyStr;
//            foreach(FileInfo dir in fileinfos){
//                //文件查找匹配
//                if (dir.Extension != ".cs"&&dir.Extension!=".lua")
//                    continue;
//                keyStr = "";
//                byte[] bytes= File.ReadAllBytes(dir.FullName);
//                string str = System.Text.Encoding.UTF8.GetString(bytes);
//                StringReader sreader= new StringReader(str);
//                string content = sreader.ReadLine();
//                while (content != null)
//                {
//                    {
//                        mc = Regex.Matches (content, pattern, RegexOptions.IgnoreCase);
//                        if (mc.Count > 0) {
//                            for (int j = 0; j < mc.Count; j++) {
//                                keyStr += " " + mc [j].Value;
//                            }
//                        }
//                    }
//                    content = sreader.ReadLine ();
//                }
//                if (keyStr != "") {
//                    pathLists.Add (dir.FullName+" "+keyStr);
//                }
//                sreader.Close ();
//            }     
//        }

//        if (pathLists.Count > 0) {
//            FileStream fs = new FileStream (url_cn, FileMode.Append);
//            StreamWriter sw = new StreamWriter (fs);
//            int count = pathLists.Count;
//            for (int i = 0; i < pathLists.Count; i++) {
//                sw.WriteLine (string.Format ("{0}", pathLists [i]));
//                EditorUtility.DisplayProgressBar ("全局搜索中", i.ToString()+"/"+count.ToString(), (i + 1) / count);
//            }
//            EditorUtility.ClearProgressBar ();
//            sw.Flush ();
//            sw.Close ();
//            fs.Close ();
//            pathLists.Clear ();
//        } else {
//            #if UNITY_EDITOR
//            Debug.Log ("rangesearch no find the target ");
//            #endif
//        }
//    }

//}
